import java.util.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.geometry.*;


/**
* Diese Klasse realisiert die abwechselnde Initiierung zweier Bewegungen
* bei einer Kollision.
*
* @author Frank Klawonn
* Letzte Aenderung 07.07.2005
* @see CollisionExample
*/
public class CollisionBehaviour2 extends Behavior
{
   //Eine Bewegung wird immer bei einer Kollision initiiert
   public WakeupOnCollisionEntry hit;

   //Diese boolsche Variable fuehrt Buch darueber, welche der beiden Bewegungen
   //als naechstes auszufuehren ist.
   public boolean toRight;
   //Die Nummer der Bewegungen
   int whichAlpha;

   public Primitive collidingShape;

   //Die Alphas, die zu den beiden Bewegungen gehoeren.
   public Alpha[] movement;


   //Der Konstruktor
   public CollisionBehaviour2(Primitive theShape, Alpha[] theAlphas,
                              Bounds theBounds)
   {
     collidingShape = theShape;
     movement = theAlphas;

     setSchedulingBounds(theBounds);

     //Bei der ersten Kollision soll die Bewegung movement[0] ausgefuehrt werden.
     whichAlpha = 0;
     toRight = true;
   }


  public void initialize()
  {
    hit = new WakeupOnCollisionEntry(collidingShape);
    wakeupOn(hit);
  }




  public void processStimulus(Enumeration criteria)
  {
    while (criteria.hasMoreElements())
    {
      WakeupCriterion theCriterion = (WakeupCriterion) criteria.nextElement();
      if (theCriterion instanceof WakeupOnCollisionEntry)
      {
        //Auswahl der Bewegung
        if (toRight) whichAlpha = 0; else whichAlpha = 1;

        //Setzen der Startzeit auf jetzt.
        movement[whichAlpha].setStartTime(System.currentTimeMillis()
                                          -movement[whichAlpha].getTriggerTime());
        //Beim naechsten Mal die andere Bewegung
        toRight = !toRight;
      }
      wakeupOn(hit);
    }
  }

}
